/**
 * 邮箱正则表达式
 * 支持常见的邮箱格式验证
 */
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/

/**
 * 手机号正则表达式
 * 支持中国大陆手机号码格式（11位数字，1开头）
 */
const phoneRegex = /^1[3-9]\d{9}$/

/**
 * 判断输入是否为邮箱格式
 * @param {string} input - 用户输入
 * @returns {boolean}
 */
export const isEmail = (input) => {
  return emailRegex.test(input)
}

/**
 * 判断输入是否为手机号格式
 * @param {string} input - 用户输入
 * @returns {boolean}
 */
export const isPhone = (input) => {
  return phoneRegex.test(input)
}

/**
 * 验证邮箱格式是否正确
 * @param {string} email - 邮箱地址
 * @returns {object} { valid: boolean, message: string }
 */
export const validateEmail = (email) => {
  if (!email) {
    return { valid: false, message: '请输入邮箱地址' }
  }

  if (!emailRegex.test(email)) {
    return { valid: false, message: '请输入正确的邮箱格式' }
  }

  return { valid: true, message: '邮箱格式正确' }
}

/**
 * 验证手机号格式是否正确
 * @param {string} phone - 手机号码
 * @returns {object} { valid: boolean, message: string }
 */
export const validatePhone = (phone) => {
  if (!phone) {
    return { valid: false, message: '请输入手机号码' }
  }

  if (!phoneRegex.test(phone)) {
    return { valid: false, message: '请输入正确的11位手机号码' }
  }

  return { valid: true, message: '手机号格式正确' }
}

/**
 * 自动识别并验证邮箱或手机号
 * @param {string} input - 用户输入
 * @returns {object} { type: 'email'|'phone'|'unknown', valid: boolean, message: string }
 */
export const validateEmailOrPhone = (input) => {
  if (!input) {
    return { type: 'unknown', valid: false, message: '请输入邮箱或手机号码' }
  }

  // 去除空格
  const trimmedInput = input.trim()

  // 判断是否包含@符号，初步判断为邮箱
  if (trimmedInput.includes('@')) {
    const emailResult = validateEmail(trimmedInput)
    return {
      type: 'email',
      valid: emailResult.valid,
      message: emailResult.message
    }
  }

  // 判断是否为纯数字，初步判断为手机号
  if (/^\d+$/.test(trimmedInput)) {
    const phoneResult = validatePhone(trimmedInput)
    return {
      type: 'phone',
      valid: phoneResult.valid,
      message: phoneResult.message
    }
  }

  // 无法识别类型
  return {
    type: 'unknown',
    valid: false,
    message: '请输入正确的邮箱地址或手机号码'
  }
}

/**
 * 获取输入类型（不验证格式）
 * @param {string} input - 用户输入
 * @returns {string} 'email'|'phone'|'unknown'
 */
export const getInputType = (input) => {
  if (!input) return 'unknown'

  const trimmedInput = input.trim()

  if (trimmedInput.includes('@')) {
    return 'email'
  }

  if (/^\d+$/.test(trimmedInput)) {
    return 'phone'
  }

  return 'unknown'
}

// 导出正则表达式供其他地方使用
export { emailRegex, phoneRegex }
